﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Core.DAL;
using System.Data;
using System.Data.SqlClient;

namespace BAL.eCorp
{
    public class Authors
    {
        #region Region: Khai báo hằng
        const string CONST_TABLE_NAME = "Author";
        #endregion

        #region Region: Khai báo biến
        protected int _authorId;
        protected string _authorName = string.Empty;
        protected string _description = String.Empty;
        protected bool _active;
        // Hệ thống
        protected DateTime? _createDate = null;
        protected string _createUser = string.Empty;
        protected DateTime? _editDate = null;
        protected string _editUser = string.Empty;
        #endregion

        #region Region: Định nghĩa thuộc tính
        /// <summary>
        /// Mã người liên hệ, tư tăng
        /// </summary>
        public int AuthorID
        {
            get { return _authorId; }
            set { _authorId = value; }
        }
        /// <summary>
        /// Họ tên người liên hệ
        /// </summary>
        public string AuthorName
        {
            get { return _authorName; }
            set { _authorName = value; }
        }
        /// <summary>
        /// Mô tả nội dung giới thiệu
        /// </summary>
        public string Description
        {
            get { return _description; }
            set { _description = value; }
        }
        /// <summary>
        /// Kích hoạt nội dung, trong cùng thời gian, chỉ có một nội dung được kích hoạt
        /// </summary>
        public bool Active
        {
            get { return _active; }
            set { _active = value; }
        }
        /// <summary>
        /// Ngày tạo
        /// </summary>
        public DateTime? CreateDate
        {
            get { return _createDate; }
            set { _createDate = value; }
        }
        /// <summary>
        /// Người tạo
        /// </summary>
        public string CreateUser
        {
            get { return _createUser; }
            set { _createUser = value; }
        }
        /// <summary>
        /// Ngày tạo
        /// </summary>
        public DateTime? EditDate
        {
            get { return _editDate; }
            set { _editDate = value; }
        }
        /// <summary>
        /// Người tạo
        /// </summary>
        public string EditUser
        {
            get { return _editUser; }
            set { _editUser = value; }
        }
        #endregion

        #region Region: Định nghĩa phương thức
        /// <summary>
        /// 
        /// </summary>
        public Authors()
        {
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="reader"></param>
        public Authors(SqlDataReader reader)
        {
            if (reader != null && !reader.IsClosed)
            {
                _authorId = reader.GetInt32(reader.GetOrdinal("AuthorID"));
                _authorName = reader.GetString(reader.GetOrdinal("AuthorName"));
                _description = reader.GetString(reader.GetOrdinal("Description"));
                if (!reader.IsDBNull(reader.GetOrdinal("Active")))
                    _active = reader.GetBoolean(reader.GetOrdinal("Active"));
                // Hệ thống
                if (!reader.IsDBNull(reader.GetOrdinal("CreateDate")))
                    _createDate = reader.GetDateTime(reader.GetOrdinal("CreateDate"));
                if (!reader.IsDBNull(reader.GetOrdinal("CreateUser")))
                    _createUser = reader.GetString(reader.GetOrdinal("CreateUser"));
                if (!reader.IsDBNull(reader.GetOrdinal("EditDate")))
                    _editDate = reader.GetDateTime(reader.GetOrdinal("EditDate"));
                if (!reader.IsDBNull(reader.GetOrdinal("EditUser")))
                    _editUser = reader.GetString(reader.GetOrdinal("EditUser"));
            }
        }
        /// <summary>
        /// Truy xuất thông tin liên hệ theo AuthorID
        /// </summary>
        /// <returns></returns>
        public static Authors GetByID(Authors o)
        {
            Authors obj = new Authors();
            DBHelp db = new DBHelp();
            db.AddParameter("@AuthorID", o.AuthorID);
            SqlDataReader reader = db.ExecuteReader("sp_Author_Select", CommandType.StoredProcedure);
            if (reader.Read())
            {
                obj = new Authors(reader);
            }
            reader.Close();
            return obj;
        }
        /// <summary>
        /// Truy xuất tất cả mẫu thông tin liên hệ
        /// </summary>
        /// <returns></returns>
        public static IList<Authors> GetAll()
        {
            DBHelp db = new DBHelp();
            IList<Authors> list = new List<Authors>();
            SqlDataReader reader = db.ExecuteReader("sp_Author_SelectAll", CommandType.StoredProcedure);
            while (reader.Read())
            {
                list.Add(new Authors(reader));
            }
            reader.Close();
            return list;
        }
        /// <summary>
        /// Cập nhập mẫu thông tin liên hệ
        /// </summary>
        /// <param name="o"></param>
        public static void Update(Authors o)
        {
            DBHelp db = new DBHelp();
            db.AddParameter("@AuthorID", o.AuthorID);
            db.AddParameter("@AuthorName", o.AuthorName);
            db.AddParameter("@Description", o.Description);
            db.AddParameter("@Active", o.Active);
            db.AddParameter("@EditDate", DateTime.Now.ToShortDateString());
            db.AddParameter("@EditUser", o.CreateUser);
            db.ExecuteNonQuery("sp_Author_Update", CommandType.StoredProcedure);
        }
        /// <summary>
        /// Thêm mới mẫu thông tin liên hệ
        /// </summary>
        /// <param name="o"></param>
        public static void Insert(Authors o)
        {
            DBHelp db = new DBHelp();
            db.AddParameter("@AuthorName", o.AuthorName);
            db.AddParameter("@Description", o.Description);
            db.AddParameter("@CreateDate", DateTime.Now.ToShortDateString());
            db.AddParameter("@CreateUser", o.CreateUser);
            db.ExecuteNonQuery("sp_Author_Insert", CommandType.StoredProcedure);
        }
        /// <summary>
        /// Xóa mẫu thông tin liên hệ
        /// </summary>
        /// <param name="o"></param>
        public static void Delete(Authors o)
        {
            DBHelp db = new DBHelp();
            db.AddParameter("@AuthorID", o.AuthorID);
            db.ExecuteNonQuery("sp_Author_Delete", CommandType.StoredProcedure);
        }
        /// <summary>
        /// Reset thuộc tính Active về 0 trước khi set Active cho nội dung khác
        /// </summary>
        /// <returns></returns>
        public static int ResetActive()
        {
            DBHelp db = new DBHelp();
            return db.ExecuteNonQuery("sp_Author_ResetActive", CommandType.StoredProcedure);
        }
        #endregion
    }
}
